#include "u_Key.h"
#include "bsp_Timer.h"
#include "menu.h"
#include "u_Beep.h"
#include "User_App.h"

extern Menu_t MenuVIII_Lamp[];
extern Menu_t MenuVIII_Lamp_2[];
extern Menu_t MenuVIII_Circulate_Pump[];

/***********************************************************************************************************************************/
/*                                                  新  建  按  键  对  象                                                          */
/***********************************************************************************************************************************/
Key_Function Key_obj_01 = {
    .KeyLongTimer = 800,                               // 长按时间 >800ms
    .KEYTriggerMode = 0,                               // #error 触发方式 0低电平触发、  1是高电平触发
    .KEYEnable = 1,                                    // 使能 0是禁用    1是使能(默认)
    .KEY_oneClick_event = Key_obj_01_oneClick_event,   // #error 按键单击事件
    .KEY_twoClick_event = Key_obj_01_twoClick_event,   // #error 按键双击事件
    .KEY_longClick_event = Key_obj_01_longClick_event, // #error 按键长按事件
};
Key_Function Key_obj_02 = {
    .KeyLongTimer = 800,                               // 长按时间 >800ms
    .KEYTriggerMode = 0,                               // #error 触发方式 0低电平触发、  1是高电平触发
    .KEYEnable = 1,                                    // 使能 0是禁用    1是使能(默认)
    .KEY_oneClick_event = Key_obj_02_oneClick_event,   // #error 按键单击事件
    .KEY_twoClick_event = Key_obj_02_twoClick_event,   // #error 按键双击事件
    .KEY_longClick_event = Key_obj_02_longClick_event, // #error 按键长按事件
};
Key_Function Key_obj_03 = {
    .KeyLongTimer = 800,                               // 长按时间 >800ms
    .KEYTriggerMode = 0,                               // #error 触发方式 0低电平触发、  1是高电平触发
    .KEYEnable = 1,                                    // 使能 0是禁用    1是使能(默认)
    .KEY_oneClick_event = Key_obj_03_oneClick_event,   // #error 按键单击事件
    .KEY_twoClick_event = Key_obj_03_twoClick_event,   // #error 按键双击事件
    .KEY_longClick_event = Key_obj_03_longClick_event, // #error 按键长按事件
};

// 按键定时处理函数 放在1ms定时器中
void KEY_obj_Ti_CallBack_Function(void)
{
    KEY_obj_Activate(KEY01_ISIN, &Key_obj_01);
    KEY_obj_Activate(KEY02_ISIN, &Key_obj_02);
    KEY_obj_Activate(KEY03_ISIN, &Key_obj_03);
}
// 按键处理函数    放在main()中whie里主函数中循环
void KEY_All_event_Handle(void)
{
    KEY_obj_event(&Key_obj_01);
    KEY_obj_event(&Key_obj_02);
    KEY_obj_event(&Key_obj_03);
}
// 功按键调试函数
void KEY_Debug(void)
{
    // KEY_obj_setOneClick_event(&Key_obj_01, Key_obj_Y2_oneClick_event); // 设置按键对象的 单击 事件

    while (1)
    {
        bsp_Ti_All_Handle();
        KEY_All_event_Handle();
    }
}

// 按键标志位
uint8_t Key_Enter = 0; // 确认键
uint8_t Key_Back = 0;  // 返回键
uint8_t Key_Up = 0;    // 上
uint8_t Key_Down = 0;  // 下

// 确认键
int8_t Key_Enter_Get(void)
{
    if (Key_Enter)
    {
        Key_Enter = 0;
        return 1;
    }
    return 0;
}
// 返回键
int8_t Key_Back_Get(void)
{
    if (Key_Back)
    {
        Key_Back = 0;
        return 1;
    }
    return 0;
}

int8_t Key_Up_Get(void)
{
    if (Key_Up)
    {
        Key_Up = 0;
        return 1;
    }
    return 0;
}

int8_t Key_Down_Get(void)
{
    if (Key_Down)
    {
        Key_Down = 0;
        return 1;
    }
    return 0;
}

void Key_Reset_All(void) // 清除所有按键标志位
{
    Key_Enter = 0;
    Key_Back = 0;
    Key_Up = 0;
    Key_Down = 0;
}

/***********************************************************************************************************************************/
/*                                                      用  户  程  序                                                              */
/***********************************************************************************************************************************/
void Key_obj_01_oneClick_event(void)
{
    if (MenuVIII_Lamp[1].Name == "状态[开]")
    {
        MenuVIII_Lamp[1].Name = "状态[关]";
        bsp_Ctrl_Lamp(OFF_s);
    }
    else
    {
        MenuVIII_Lamp[1].Name = "状态[开]";
        bsp_Ctrl_Lamp(ON_s);
    }
    Beep_Sound(1);
}
void Key_obj_01_twoClick_event(void)
{
}
void Key_obj_01_longClick_event(void)
{
}
void Key_obj_01_oneClick_OLED_event(void)
{
    Key_Down += 1;
}
void Key_obj_01_twoClick_OLED_event(void)
{
    Key_Down += 1;
}

void Key_obj_02_oneClick_event(void)
{

    if (MenuVIII_Lamp_2[1].Name == "状态[开]")
    {
        MenuVIII_Lamp_2[1].Name = "状态[关]";
        bsp_Ctrl_Down_Lamp(OFF_s);
    }
    else
    {
        MenuVIII_Lamp_2[1].Name = "状态[开]";
        bsp_Ctrl_Down_Lamp(ON_s);
    }
    Beep_Sound(1);
}
void Key_obj_02_twoClick_event(void)
{
}
void Key_obj_02_longClick_event(void)
{
    if (OLED_Menu_Get_RunListFlag() == 1)
    {
        OLED_Menu_Set_RunListFlag(0);
        KEY_obj_setOneClick_event(&Key_obj_01, Key_obj_01_oneClick_event);
        KEY_obj_setOTwoClick_event(&Key_obj_01, Key_obj_01_twoClick_event);
        KEY_obj_setOneClick_event(&Key_obj_02, Key_obj_02_oneClick_event);
        KEY_obj_setOTwoClick_event(&Key_obj_02, Key_obj_02_twoClick_event);
        KEY_obj_setOneClick_event(&Key_obj_03, Key_obj_03_oneClick_event);
        KEY_obj_setOTwoClick_event(&Key_obj_03, Key_obj_03_twoClick_event);
    }
    else if (OLED_Menu_Get_RunListFlag() == 0)
    {
        OLED_Menu_Set_RunListFlag(1);
        KEY_obj_setOneClick_event(&Key_obj_01, Key_obj_01_oneClick_OLED_event);
        KEY_obj_setOTwoClick_event(&Key_obj_01, Key_obj_01_twoClick_OLED_event);
        KEY_obj_setOneClick_event(&Key_obj_02, Key_obj_02_oneClick_OLED_event);
        KEY_obj_setOTwoClick_event(&Key_obj_02, Key_obj_02_twoClick_OLED_event);
        KEY_obj_setOneClick_event(&Key_obj_03, Key_obj_03_oneClick_OLED_event);
        KEY_obj_setOTwoClick_event(&Key_obj_03, Key_obj_03_twoClick_OLED_event);
    }
    Beep_Sound(1);
}
void Key_obj_02_oneClick_OLED_event(void)
{
    Key_Enter += 1;
}
void Key_obj_02_twoClick_OLED_event(void)
{
    Key_Enter += 1;
}

void Key_obj_03_oneClick_event(void)
{
    if (MenuVIII_Circulate_Pump[1].Name == "状态[开]")
    {
        MenuVIII_Circulate_Pump[1].Name = "状态[关]";
        bsp_Ctrl_Circulate_Pump(OFF_s);
    }
    else
    {
        MenuVIII_Circulate_Pump[1].Name = "状态[开]";
        bsp_Ctrl_Circulate_Pump(ON_s);
    }
    Beep_Sound(1);
}
void Key_obj_03_twoClick_event(void)
{
}
void Key_obj_03_longClick_event(void)
{
}
void Key_obj_03_oneClick_OLED_event(void)
{
    Key_Up += 1;
}
void Key_obj_03_twoClick_OLED_event(void)
{
    Key_Up += 1;
}
